package cn.dxj1016.lambda;
/*
推导lambda表达式
 */
public class TestLambda1 {
//    3.静态内部类
    static class Like2 implements ILike {

    @Override
    public void lambda(int a) {
        System.out.println("i like lambda"+a);
    }
}

    public static void main(String[] args) {
        ILike like = new Like();
        like.lambda(2);

         like = new Like2();
         like.lambda(3);


//         4.局部内部类
        class Like3 implements ILike {

            @Override
            public void lambda(int a) {
                System.out.println("i like lambda"+a);
            }
        }
        like = new Like3();
        like.lambda(4);

//        5.匿名内部类,没有类的名称，必须帮助接口或者父类4
        like=new ILike() {
            @Override
            public void lambda(int a) {
                System.out.println("i like lambda"+a);

            }
        };
        like.lambda(5);

//        6.用lambda简化
        like=(int a)->{
            System.out.println("i like lambda"+a);
        };
        like.lambda(6);

//        7.简化6，参数类型
        like=(a)->{
            System.out.println("i like lambda"+a);
        };
        like.lambda(7);

//        8.简化7，简化括号
        like=a->{
            System.out.println("i like lambda"+a);
        };
        like.lambda(8);

//        9.简化8，去掉花括号;如果多条语句就不能简化花括号
        like=a->System.out.println("i like lambda"+a);
        like.lambda(9);

//        总结：
//        Lambda表达式只能有一行代码的情况下才能就简化成为一行，如果有多行，那么就要用代码块包裹。
//        前提是接口为函数式接口
//        多个参数也可以去掉参数类型，要去掉就都去掉，必须加上括号
    }
}


//1.定义一个函数式接口
interface ILike {
    void lambda(int a);
}

//2.实现类
class Like implements ILike {

    @Override
    public void lambda(int a) {
        System.out.println("i like lambda"+a);
    }
}